package com.qfmy.webapp.mapper.user;


import com.qfmy.model.entity.userInfo.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.math.BigDecimal;

/**
 * @author 清风明月
 * @Package com.qfmy.webapp.mapper.user
 * @date 2025/11/11
 * @description 用户mapper表
 */
@Mapper
@SuppressWarnings("all")
public interface UserInfoMapper {

    /**
     * 根据手机号查询用户信息
     *
     * @param phone
     * @return
     */
    UserInfo selectByPhone(@Param("phone") String phone);

    /**
     * 插入用户信息
     * @param userInfo
     */
    void insert(UserInfo userInfo);

    /**
     * 更新用户信息
     *
     * @param userInfo 用户信息对象
     * @param phone 原始手机号(用于定位更新记录)
     */
    void update(@Param("userInfo") UserInfo userInfo, @Param("phone") String phone);

    /**
     * 更新用户手机号
     * @param phone
     * @param userId
     */
    @Update("update user_info set phone = #{phone} where user_id = #{userId}")
    void updatePhone(String phone, long userId);

    /**
     * 根据用户id查询用户信息
     * @param userId
     * @return
     */
    UserInfo getUserInfo(@Param("userId") Long userId);

    /**
     * 更新用户最后登录时间
     * @param userId
     */
    @Update("update user_info set last_login_time = now() where user_id = #{userId}")
    void updateLastLoginTime(Long userId);

    /**
     * 更新用户头像
     * @param avatar
     * @param userId
     */
    @Update("update user_info set avatar = #{avatar} where user_id = #{userId}")
    void updateUserAvatar(String avatar, Long userId);

    /**
     * 更新用户余额
     * @param userId
     * @param reward
     */
    @Update("update user_info set score = score + #{reward} where user_id = #{userId}")
    void updateAccount(Long userId, BigDecimal reward);

    /**
     * 根据用户id获取用户喜欢的偏好
     * @param userId
     * @return
     */
    @Select("update user_info set like_type = #{likeType} where user_id = #{userId}")
    String getUserLikeType(Long userId);

    /**
     * 更新用户喜欢偏好
     * @param userId
     */
    @Update("update user_info set like_type = #{likeType} where user_id = #{userId}")
    void updateLike(Long userId);

    /**
     * 更新发布评论的用户的点赞数量
     * @param commentUserId
     */
    @Update("update user_info set like_count = like_count + 1 where user_id = #{commentUserId}")
    void updateLikeAdd(Long commentUserId);

    /**
     * 减少用户点赞数量
     * @param publishUserId
     */
    @Update("update user_info set like_count = like_count - 1 where user_id = #{publishUserId}")
    void updateLikeCountReduce(Long publishUserId);

    /**
     * 更新用户时长
     * @param time
     * @param userId
     */
    @Update("update user_info set zongdu = zongdu + #{time} where user_id = #{userId}")
    void updateTime(Integer time, Long userId);

    /**
     * 减少用户余额
     * @param userId
     * @param bigDecimal
     */
    @Update("update user_info set score = score - #{bigDecimal} where user_id = #{userId}")
    void updateReduce(Long userId, BigDecimal bigDecimal);

    /**
     * 修改用户支付密码
     * @param payPassword
     * @param userId
     */
    @Update("update user_info set pay_password = #{payPassword} where user_id = #{userId}")
    void updatePayPassword(String payPassword, Long userId);
}
